package com.flank.weather.logic.network

import android.util.Log
import com.google.gson.Gson
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.lang.RuntimeException
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine

/**
 * Created by 2021/9/1
 * Email 270554501@qq.com
 * Author Flank
 * 统一网络数据源访问接口
 */
object SunnyWeatherNetWork {

    private val placeService=ServiceCreator.create(PlaceService::class.java)
    suspend fun searchPlaces(query: String)= placeService.searchPlaces(query).await()

    private val weatherService=ServiceCreator.create(WeatherService::class.java)
    suspend fun getDailyWeather(lng:String,lat:String)= weatherService.getDailyWeather(lng,lat).await()
    suspend fun getRealtimeWeather(lng:String,lat: String)= weatherService.getRealtimeWeather(lng,lat).await()

    private suspend fun <T> Call<T>.await():T{
        return suspendCoroutine { continuation ->
            enqueue(object : Callback<T> {
                override fun onResponse(call: Call<T>, response: Response<T>) {
                    Log.e("Response",Gson().toJson(response.body().toString()))
                    val body=response.body()
                    if (body !=null) continuation.resume(body)
                    else continuation.resumeWithException(RuntimeException("response body is null"))
                }

                override fun onFailure(call: Call<T>, t: Throwable) {
                    continuation.resumeWithException(t)
                }

            })
        }
    }



}